Computers are ubiquitous in today's society. They come in all different varieties and can be found in places such as automobiles, the grocery store, banks, personal digital assistants, cell phones, as well as in many companies. For each of these implementations, computers may execute different types of computer software, sometimes called “applications”, where the application is custom suited to the particular implementation. In a corporate environment, sometimes called an “enterprise” scenario, the company may have hundreds or thousands of computers being used in different ways each with different software needs. These software needs include applications dedicated to the activities that end users operating the computer may need as well as activities dedicated to the infrastructure and/or management responsibilities. For example, a bank may implement a financial application that allows users to manage their finances from their home computer. In this example, the financial application would include software functionality to actually perform the tasks desired by the user (e.g., transferring money) as well as functionality to manage the infrastructure of the application (e.g., ensuring that the connection between the bank and the user is secure).
Creating this infrastructure software and subsequently installing it can be time consuming and error prone. Also, creating this infrastructure software can delay a company's time to market for its products and reduce its overall profitability. In addition, the problems associated with creating this infrastructure software are only exacerbated with each new software application to be implemented. Furthermore, each customer may require different capabilities in their enterprise software. For example, some customers may require different user interfaces (command line vs. Web user interface). These requirements may rule out otherwise suitable software applications and/or require product re-engineering.
Thus, automatic software generation and automatic system configuration are needed to address one or more of these problems.